package parser;

import org.w3c.dom.*;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;

/**
 * @author Miss Chen
 * @version 1.0
 * @date 2024年09月05日16:26
 */
public class DOMParser {
    public static void main(String[] args) {

        // 创建DOM工厂
        DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
        try {

            //获取解析器
            DocumentBuilder builder=factory.newDocumentBuilder();

            //解析文档
            Document document=builder.parse(DOMParser.class.getClassLoader().getResourceAsStream("students.xml"));

            //获取根元素
            Element root=document.getDocumentElement();
            System.out.println("标签名:"+root.getTagName());

            //根据属性名获取属性值
            String no=root.getAttribute("no");
            System.out.println("no属性:"+no);

            //获取所有属性节点的集合
            NamedNodeMap attributes=root.getAttributes();

            for(int i=0;i<attributes.getLength();i++){
                //取出当前遍历的节点
                Node node=attributes.item(i);
                System.out.println(node);

            }
            System.out.println("-------------");
            //获取所有指定元素的所有子元素
            NodeList childNodes=root.getChildNodes();
            for(int i=0;i<childNodes.getLength();i++){
                Node node=childNodes.item(i);

                //需要判断当前遍历的节点的类型
                //  不同类型的节点需要做不一样的处理
                if(node.getNodeType()==Node.ELEMENT_NODE){
                    Element ele= (Element) node;
                    System.out.println("标签名:"+ele.getTagName());
                    NamedNodeMap attributes2=ele.getAttributes();
                    for(int j=0;j<attributes2.getLength();j++){
                        Node item=attributes2.item(j);
                        System.out.println(item);
                    }
                    System.out.println("***********************");
                    NodeList nodes=ele.getChildNodes();
                    for(int j=0;j<nodes.getLength();j++){
                        Node item=nodes.item(j);
                        System.out.println(item);

                        if(item.getNodeType()==Node.ELEMENT_NODE){
                            Element nameEle= (Element) item;
                            System.out.println("标签名:"+nameEle.getTagName());
                        }
                        if(item.getNodeType()==Node.TEXT_NODE){

                            System.out.println("文本内容:"+node.getTextContent());
                        }

                    }

                }
            }



        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
